//SPDX-FileCopyrightText: Copyright 2022-2024 深圳市同心圆网络有限公司
//SPDX-License-Identifier: GPL-3.0-only

export enum FILE_TYPE {
  FILE_TYPE_IMAGE,
  FILE_TYPE_AUDIO,
  FILE_TYPE_VIDEO,
  FILE_TYPE_DOC,
  FILE_TYPE_OTHER,
}

export function getFileType(ext: string): FILE_TYPE {
  let fileExt = ext.toLowerCase();
  const pos = fileExt.lastIndexOf(".");
  if (pos != -1) {
    fileExt = fileExt.substring(pos + 1);
  }
  if (
    [
      'bmp',
      'gif',
      'jpg',
      'jpeg',
      'png',
      'apng',
      'avif',
      'jfif',
      'pjpeg',
      'pjp',
      'svg',
      'webp',
      'ico',
      'cur',
      'tif',
      'tiff',
    ].includes(fileExt)
  ) {
    return FILE_TYPE.FILE_TYPE_IMAGE;
  } else if (
    [
      'abc',
      'mtm',
      'ec3',
      'flp',
      'mp3',
      'cgrp',
      'l',
      'wproj',
      'weba',
      'copy',
      'nbs',
      'mui',
      'ust',
      'mmpz',
      'asd',
      'sf2',
      'xfs',
      'flac',
      'aup',
      'ckb',
      'kt3',
      'fsc',
      'efs',
      'voxal',
      'gsf',
      'dct',
      'xrns',
      'mmlp',
      'pek',
      'igp',
      'amxd',
      'sngx',
      'h5s',
      'minigsf',
      'vpw',
      'fev',
      'pna',
      'omg',
      'musicxml',
      'vsq',
      'sc2',
      'ftm',
      'wow',
      'mti',
      'sds',
      'cwb',
      'wus',
      'mka',
      'xmu',
      'gp',
      'afc',
      'acp',
      'itls',
      'aimppl',
      'dcf',
      'rad',
      'phy',
      'saf',
      'nki',
      'slp',
      'ptxt',
      'cdo',
      'sty',
      'toc',
      'dmse',
      'dff',
      'm4r',
      'sfk',
      'midi',
      'als',
      'vdj',
      'gsm',
      'mid',
      'gp5',
      '4mp',
      'apl',
      'band',
      'bun',
      'ang',
      'pcg',
      'rmj',
      'cue',
      'ogg',
      'rns',
      'logic',
      'uni',
      'rx2',
      'vag',
      'akp',
      'ply',
      'abm',
      'wav',
      'rex',
      '5xe',
      'wax',
      'omf',
      'vlc',
      'alc',
      'dfc',
      'sfpack',
      'rip',
      'aria',
      'sgp',
      'mscz',
      'psm',
      'uax',
      'cws',
      'acd-zip',
      'ncw',
      'emx',
      'ovw',
      'dsm',
      'sfl',
      'pla',
      'ac3',
      'iti',
      'vyf',
      'wfp',
      'qcp',
      'frg',
      'rol',
      'dm',
      'vsqx',
      'sseq',
      'q1',
      'omx',
      'q2',
      'acm',
      'vqf',
      'nrt',
      'rmx',
      'sesx',
      'flm',
      'm3u8',
      'm4a',
      'gbs',
      'act',
      'bww',
      'sdat',
      'rgrp',
      'pts',
      'ptx',
      'aob',
      'pcast',
      'mxl',
      'cidb',
      'tg',
      'trak',
      'aa3',
      'f32',
      'isma',
      'g726',
      's3m',
      'sbi',
      's3i',
      'ab',
      'mpu',
      'pandora',
      'hca',
      'ram',
      'sib',
      'syx',
      'aif',
      'wma',
      'rso',
      'mtp',
      'gpk',
      'm3u',
      '3ga',
      'w01',
      'med',
      'oma',
      'vgm',
      'mtf',
      'wave',
      'stm',
      'h5b',
      'uw',
      'cdda',
      'logicx',
      'cwt',
      'wrk',
      'at3',
      'note',
      'b4s',
      'mod',
      'pkf',
      'xspf',
      'm4b',
      'ins',
      'oga',
      'caf',
      'dra',
      'zpa',
      'acd',
      'svd',
      'mux',
      'kmp',
      'wpp',
      'opus',
      'aiff',
      '669',
      'ptt',
      'wfm',
      'mus',
      'mus',
      'mo3',
      'aac',
      'xa',
      'bnk',
      'cda',
      'ics',
      'mpdp',
      'nkx',
      'wvc',
      'mx3',
      'swa',
      'bidule',
      'wfb',
      'mbr',
      'sxt',
      'stap',
      'dmsa',
      'rta',
      'vc3',
      'a2p',
      'lof',
      'mdr',
      'dss',
      'emd',
      'amf',
      'sd',
      'cdr',
      'ds',
      'vpl',
      'h4b',
      'mx5template',
      'ptm',
      'aa',
      'dig',
      'bdd',
      'sou',
      'agm',
      'ssnd',
      'rti',
      'mx4',
      'gpbank',
      'dtshd',
      'aup3',
      'nkm',
      'cwp',
      'ftm',
      'dsf',
      'mogg',
      'agr',
      'sng',
      'yookoo',
      'vmd',
      'wpk',
      'vox',
      'lso',
      'aud',
      'bwg',
      'f4a',
      'brstm',
      'cts',
      'amr',
      'wve',
      'smf',
      'dcm',
      'iff',
      'sns',
      'gsflib',
      'cpr',
      'drg',
      'nml',
      'rcy',
      'wtpt',
      'vip',
      'u',
      'nwc',
      'syh',
      'syw',
      'm4p',
      'ra',
      'fpa',
      'w64',
      'vpm',
      'zvd',
      'shn',
      'nkc',
      'gpx',
      'tak',
      'raw',
      'pk',
      'dvf',
      'igr',
      'npl',
      'la',
      'lwv',
      'obw',
      'mdc',
      'ftmx',
      'mxmf',
      'kar',
      'dewf',
      'h5e',
      'tak',
      'mx5',
      'odm',
      'uwf',
      'myr',
      'syn',
      'musx',
      'mmm',
      'nvf',
      'dw',
      'xsp',
      'vpr',
      'ds2',
      'mpa',
      'psf',
      'adt',
      'avastsounds',
      'a2m',
      'mmp',
      'mpga',
      '5xb',
      'all',
      'dts',
      'peak',
      'wv',
      'cfa',
      'song',
      'seq',
      'sppack',
      'pac',
      'fzv',
      'rng',
      'efk',
      'caff',
      'hbe',
      'esps',
      'mt2',
      'ksc',
      'nsa',
      'koz',
      'conform',
      'efq',
      'psf1',
      'vb',
      'rsn',
      'psf2',
      'wwu',
      'fzf',
      'koz',
      'zpl',
      'slx',
      'sfz',
      'ma1',
      'scs11',
      'wut',
      'nra',
      'svp',
      'xm',
      'bnl',
      'rpl',
      'pca',
      'dpdoc',
      'ssm',
      'g721',
      'aaxc',
      'rcd',
      'gig',
      'rdvxz',
      'dls',
      'mptm',
      'capobundle',
      'mpd',
      'bwf',
      'm3up',
      'gbproj',
      'acd-bak',
      'hsb',
      'ots',
      'groove',
      'vap',
      'msmpl_bank',
      'm5p',
      'k26',
      'fdp',
      'rmi',
      'krz',
      'sma',
      'sap',
      'tta',
      'au',
      'mts',
      '8svx',
      'rfl',
      'ksf',
      'ape',
      'jam',
      'pho',
      'a2b',
      'sd',
      'amz',
      'adg',
      'ptf',
      'adv',
      'nmsv',
      'usf',
      'mmf',
      'pno',
      'aifc',
      'smp',
      'csh',
      'miniusf',
      'ove',
      'aax',
      'ams',
      'ses',
      'vrf',
      'xmf',
      'r1m',
      'mp2',
      'mpc',
      'prg',
      'psy',
      'dmc',
      'nks',
      '5xs',
      'smpx',
      'ovw',
      'f2r',
      'rbs',
      'bank',
      'voc',
      'snd',
      'a2i',
      'emp',
      'rvx',
      's3z',
      'ppc',
      'ult',
      'stx',
      'vgz',
      'nkb',
      'mgv',
      'bap',
      'usflib',
      'smp',
      'exs',
      'vtx',
      'snd',
      'f64',
      'sfap0',
      'td0',
      'g723',
      'kfn',
      'adts',
      'expressionmap',
      'sd2f',
      'rbs',
      'ams',
      'wfd',
      'sfs',
      'jspf',
      'minipsf',
      'ntn',
      'narrative',
      'minipsf2',
      'ptcop',
      'df2',
      'dmf',
      'rax',
      'dwd',
      'cpt',
      'snd',
      'pvc',
      'ofr',
      'fsm',
      'ay',
      'ckf',
      'iaa',
      'mte',
      'ariax',
      'wtpl',
      'svx',
      'repeaks',
      'pbf',
      'txw',
      'cel',
      'vmo',
      'sd2',
      'jbx',
      'vmf',
      'rts',
      'msv',
      'vmf',
    ].includes(fileExt)
  ) {
    return FILE_TYPE.FILE_TYPE_AUDIO;
  } else if (
    [
      'vsq',
      'sc2',
      'ftm',
      'wow',
      'mti',
      'sds',
      'cwb',
      'wus',
      'mka',
      'xmu',
      'gp',
      'afc',
      'acp',
      'itls',
      'aimppl',
      'dcf',
      'rad',
      'phy',
      'saf',
      'nki',
      'slp',
      'ptxt',
      'cdo',
      'sty',
      'toc',
      'dmse',
      'dff',
      'm4r',
      'sfk',
      'midi',
      'als',
      'vdj',
      'gsm',
      'mid',
      'gp5',
      '4mp',
      'apl',
      'band',
      'bun',
      'ang',
      'pcg',
      'rmj',
      'cue',
      'ogg',
      'rns',
      'logic',
      'uni',
      'rx2',
      'vag',
      'akp',
      'ply',
      'abm',
      'wav',
      'rex',
      '5xe',
      'wax',
      'omf',
      'vlc',
      'alc',
      'dfc',
      'sfpack',
      'rip',
      'aria',
      'sgp',
      'mscz',
      'psm',
      'uax',
      'cws',
      'acd-zip',
      'ncw',
      'emx',
      'ovw',
      'dsm',
      'sfl',
      'pla',
      'ac3',
      'iti',
      'vyf',
      'wfp',
      'qcp',
      'frg',
      'rol',
      'dm',
      'vsqx',
      'sseq',
      'q1',
      'omx',
      'q2',
      'acm',
      'vqf',
      'nrt',
      'rmx',
      'sesx',
      'flm',
      'm3u8',
      'm4a',
      'gbs',
      'act',
      'bww',
      'sdat',
      'rgrp',
      'pts',
      'ptx',
      'aob',
      'pcast',
      'mxl',
      'cidb',
      'tg',
      'trak',
      'aa3',
      'f32',
      'isma',
      'g726',
      's3m',
      'sbi',
      's3i',
      'ab',
      'mpu',
      'pandora',
      'hca',
      'ram',
      'sib',
      'syx',
      'aif',
      'wma',
      'rso',
      'mtp',
      'gpk',
      'm3u',
      '3ga',
      'w01',
      'med',
      'oma',
      'vgm',
      'mtf',
      'wave',
      'stm',
      'h5b',
      'uw',
      'cdda',
      'logicx',
      'cwt',
      'wrk',
      'at3',
      'note',
      'b4s',
      'mod',
      'pkf',
      'xspf',
      'm4b',
      'ins',
      'oga',
      'caf',
      'dra',
      'zpa',
      'acd',
      'svd',
      'mux',
      'kmp',
      'wpp',
      'opus',
      'aiff',
      '669',
      'ptt',
      'wfm',
      'mus',
      'mus',
      'mo3',
      'aac',
      'xa',
      'bnk',
      'cda',
      'ics',
      'mpdp',
      'nkx',
      'wvc',
      'mx3',
      'swa',
      'bidule',
      'wfb',
      'mbr',
      'sxt',
      'stap',
      'dmsa',
      'rta',
      'vc3',
      'a2p',
      'lof',
      'mdr',
      'dss',
      'emd',
      'amf',
      'sd',
      'cdr',
      'ds',
      'vpl',
      'h4b',
      'mx5template',
      'ptm',
      'aa',
      'dig',
      'bdd',
      'sou',
      'agm',
      'ssnd',
      'rti',
      'mx4',
      'gpbank',
      'dtshd',
      'aup3',
      'nkm',
      'cwp',
      'ftm',
      'dsf',
      'mogg',
      'agr',
      'sng',
      'yookoo',
      'vmd',
      'wpk',
      'vox',
      'lso',
      'aud',
      'bwg',
      'f4a',
      'brstm',
      'cts',
      'amr',
      'wve',
      'smf',
      'dcm',
      'iff',
      'sns',
      'gsflib',
      'cpr',
      'drg',
      'nml',
      'rcy',
      'wtpt',
      'vip',
      'u',
      'nwc',
      'syh',
      'syw',
      'm4p',
      'ra',
      'fpa',
      'w64',
      'vpm',
      'zvd',
      'shn',
      'nkc',
      'gpx',
      'tak',
      'pk',
      'dvf',
      'igr',
      'npl',
      'la',
      'lwv',
      'obw',
      'mdc',
      'ftmx',
      'mxmf',
      'kar',
      'dewf',
      'h5e',
      'tak',
      'mx5',
      'odm',
      'uwf',
      'myr',
      'syn',
      'musx',
      'mmm',
      'nvf',
      'dw',
      'xsp',
      'vpr',
      'ds2',
      'mpa',
      'psf',
      'adt',
      'avastsounds',
      'a2m',
      'mmp',
      'mpga',
      '5xb',
      'all',
      'dts',
      'peak',
      'wv',
      'cfa',
      'song',
      'seq',
      'sppack',
      'pac',
      'fzv',
      'rng',
      'efk',
      'caff',
      'hbe',
      'esps',
      'mt2',
      'ksc',
      'nsa',
      'koz',
      'conform',
      'efq',
      'psf1',
      'vb',
      'rsn',
      'psf2',
      'wwu',
      'fzf',
      'koz',
      'zpl',
      'slx',
      'sfz',
      'ma1',
      'scs11',
      'wut',
      'nra',
      'svp',
      'xm',
      'bnl',
      'rpl',
      'pca',
      'dpdoc',
      'ssm',
      'g721',
      'aaxc',
      'rcd',
      'gig',
      'rdvxz',
      'dls',
      'mptm',
      'capobundle',
      'mpd',
      'bwf',
      'm3up',
      'gbproj',
      'acd-bak',
      'hsb',
      'ots',
      'groove',
      'vap',
      'msmpl_bank',
      'm5p',
      'k26',
      'fdp',
      'rmi',
      'krz',
      'sma',
      'sap',
      'tta',
      'au',
      'mts',
      '8svx',
      'rfl',
      'ksf',
      'ape',
      'jam',
      'pho',
      'a2b',
      'sd',
      'amz',
      'adg',
      'ptf',
      'adv',
      'nmsv',
      'usf',
      'mmf',
      'pno',
      'aifc',
      'smp',
      'csh',
      'miniusf',
      'ove',
      'aax',
      'ams',
      'ses',
      'vrf',
      'xmf',
      'r1m',
      'mp2',
      'mpc',
      'prg',
      'psy',
      'dmc',
      'nks',
      '5xs',
      'smpx',
      'ovw',
      'f2r',
      'rbs',
      'bank',
      'voc',
      'snd',
      'a2i',
      'emp',
      'rvx',
      's3z',
      'ppc',
      'ult',
      'stx',
      'vgz',
      'nkb',
      'mgv',
      'bap',
      'usflib',
      'smp',
      'exs',
      'vtx',
      'snd',
      'f64',
      'sfap0',
      'td0',
      'g723',
      'kfn',
      'adts',
      'expressionmap',
      'sd2f',
      'rbs',
      'ams',
      'wfd',
      'sfs',
      'jspf',
      'minipsf',
      'ntn',
      'narrative',
      'minipsf2',
      'ptcop',
      'df2',
      'dmf',
      'rax',
      'dwd',
      'cpt',
      'snd',
      'pvc',
      'ofr',
      'fsm',
      'ay',
      'ckf',
      'iaa',
      'mte',
      'ariax',
      'wtpl',
      'svx',
      'repeaks',
      'pbf',
      'txw',
      'cel',
      'vmo',
      'sd2',
      'jbx',
      'vmf',
      'rts',
      'msv',
      'vmf',
    ].includes(fileExt)
  ) {
    return FILE_TYPE.FILE_TYPE_VIDEO;
  } else if (
    [
      'doc',
      'docm',
      'docx',
      'dot',
      'dotm',
      'dotx',
      'odt',
      'pdf',
      'rtf',
      'txt',
      'wps',
      'xps',
      'csv',
      'dbf',
      'dif',
      'ods',
      'prn',
      'slk',
      'xla',
      'xlam',
      'xls',
      'xlsb',
      'xlsm',
      'xlsx',
      'xlt',
      'xltm',
      'xltx',
      'xlw',
      'odp',
      'pot',
      'potm',
      'potx',
      'ppa',
      'ppam',
      'pps',
      'ppsm',
      'ppsx',
      'ppt',
      'pptm',
      'pptx',
    ].includes(fileExt)
  ) {
    return FILE_TYPE.FILE_TYPE_DOC;
  }
  return FILE_TYPE.FILE_TYPE_OTHER;
}
